From fbe52a1dd15dae010f1213213303ac58267a78f0 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Thu, 29 Mar 2007 13:29:24 +0100 Subject: [PATCH] xen: Pause domain when changing debug status. Signed-off-by: Keir Fraser --- xen/common/domctl.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/xen/common/domctl.c b/xen/common/domctl.c index a9e4402a38..952c419f1d 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -620,29 +620,33 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domctl_t) u_domctl) case XEN_DOMCTL_setdomainhandle: { struct domain *d; + ret = -ESRCH; d = rcu_lock_domain_by_id(op->domain); - if ( d != NULL ) - { - memcpy(d->handle, op->u.setdomainhandle.handle, - sizeof(xen_domain_handle_t)); - rcu_unlock_domain(d); - ret = 0; - } + if ( d == NULL ) + break; + + memcpy(d->handle, op->u.setdomainhandle.handle, + sizeof(xen_domain_handle_t)); + rcu_unlock_domain(d); + ret = 0; } break; case XEN_DOMCTL_setdebugging: { struct domain *d; + ret = -ESRCH; d = rcu_lock_domain_by_id(op->domain); - if ( d != NULL ) - { - d->debugger_attached = !!op->u.setdebugging.enable; - rcu_unlock_domain(d); - ret = 0; - } + if ( d == NULL ) + break; + + domain_pause(d); + d->debugger_attached = !!op->u.setdebugging.enable; + domain_unpause(d); /* causes guest to latch new status */ + rcu_unlock_domain(d); + ret = 0; } break; -- 2.30.2